//
//  PromptViewController.m
//  用户信息设置
//
//  Created by 周述坚 on 16/11/13.
//  Copyright © 2016年 周述坚. All rights reserved.
//

#import "JPPresentationController.h"
//#define width self.view.bounds.size.width
#define heigth self.view.bounds.size.height

@interface JPPresentationController ()
/* 遮盖视图 */
@property (weak, nonatomic) UIButton *coverBtn;

@end

@implementation JPPresentationController

/**
 *  containerView已经布局完它的子视图
 */
- (void)containerViewDidLayoutSubviews {
    [super containerViewDidLayoutSubviews];
    
    /*------
     1. 与Animator不同的是, PresentationController并不需要手动将根视图添加到containerView身上
     ------*/
    
    //1. 修改目标控制器的根视图frame值
    // HMModalCar
    UIViewController *vc = self.presentedViewController;
    // NSLog(@"%@", vc);
    vc.view.frame = CGRectMake(0, self.containerView.frame.size.height - 250, self.containerView.frame.size.width, 250);
}

/**
 *  呈现另一个控制器的动画效果即将开始
 */
- (void)presentationTransitionWillBegin {
    /*------
     1. 可以为当前的视图层级添加一些额外的自定义视图
     2. 可以为这些视图关联一些额外的动画
     ------*/
    // containerView 提供给你放置内容的地方
    
    //2. 添加一个灰色的遮盖图层
    UIButton *coverBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    _coverBtn = coverBtn;
    coverBtn.backgroundColor = [UIColor blackColor];
    coverBtn.alpha = 0.0;
    
    [coverBtn addTarget:self action:@selector(coverBtnAction:) forControlEvents:UIControlEventTouchUpInside];
    [coverBtn setFrame:self.containerView.bounds];
    
    // 添加到containerView当中, 才能显示
    [self.containerView addSubview:coverBtn];
    
    /*------ 为灰色遮盖图层添加动画执行效果 ------*/
    // 在Presentation当中, 执行动画应该是transitionCoordinator(过渡协调器)
    // transitionCoordinator并不在PresentationController, 在UIViewController
    
    // 1. 找到目标控制器身上的transitionCoordinator
    /**
     1. 遵守了UIViewControllerTransitionCoordinator协议的对象, 为视图控制器的转场动画提供了支持
     2. 通常并不需要自己额外的自定义类来遵守该协议, 在视图控制器呈现出现到消失的过程当中, UIKit会自动生成一个遵守了UIViewControllerTransitionCoordinator协议的对象, 并且会赋值给控制器的transitionCoordinator属性上.
     */
    
    // animateAlongsideTransition 会执行指定动画, 动画时间与控制器的转场动画一样
    [self.presentedViewController.transitionCoordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext>  _Nonnull context) {
        
        // 执行自定义动画
        coverBtn.alpha = 0.6;
        
    } completion:^(id<UIViewControllerTransitionCoordinatorContext>  _Nonnull context) {
        // 动画执行完成后触发
    }];
}

/**
 *  呈现另一个控制器的动画效果已经结束
 */
- (void)presentationTransitionDidEnd:(BOOL)completed {
    // 在此方法中, 根据需要做好清除工作 (根据你的情况决定)
    
    // 如果completed为NO,
    if (completed == NO) {
        // 此时是失败情况, 要将添加的自定义视图移走
        [self.coverBtn removeFromSuperview];
    }
}

/**
 *  消失另一个控制器的动画效果即将开始
 */
- (void)dismissalTransitionWillBegin {
    /*------ 让遮盖慢慢透明 ------*/
    [self.presentedViewController.transitionCoordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext>  _Nonnull context) {
        
        _coverBtn.alpha = 0.0;
        
    } completion:nil];
    
    /**
     不要在该方法中移除添加的自定义视图
     要在dismissalTransitionDidEnd: 方法当中移除添加的自定义视图
     */
}

/**
 *  消失另一个控制器的动画效果即将结束
 */
- (void)dismissalTransitionDidEnd:(BOOL)completed {
    // 顺利完成了dismiss后, 移除添加的自定义视图
    if (completed == YES) {
        [self.coverBtn removeFromSuperview];
    }
}

- (void)coverBtnAction:(UIButton *)sender {
    // 让自己消失 , self表示的是PresentationController
    UIViewController *vc = self.presentedViewController;
    [vc dismissViewControllerAnimated:YES completion:nil];
}


@end
